home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / Appearance / AppearanceTest.java.z / AppearanceTest.java
Encoding:
Java Source  |  2003-08-08  |  10.5 KB  |  376 lines

  1. /*
  2.  *    @(#)AppearanceTest.java 1.28 02/10/21 13:36:45
  3.  *
  4.  * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. import java.applet.Applet;
  41. import java.awt.*;
  42. import java.awt.event.*;
  43. import com.sun.j3d.utils.applet.MainFrame;
  44. import com.sun.j3d.utils.universe.*;
  45. import com.sun.j3d.utils.image.TextureLoader;
  46. import javax.media.j3d.*;
  47. import javax.vecmath.*;
  48.  
  49. public class AppearanceTest extends Applet {
  50.  
  51.     private java.net.URL texImage = null;
  52.     private java.net.URL bgImage = null;
  53.  
  54.     private SimpleUniverse u = null;
  55.  
  56.     private BranchGroup createSceneGraph() {
  57.     // Create the root of the branch graph
  58.     BranchGroup objRoot = new BranchGroup();
  59.  
  60.     // Create a bounds for the background and lights
  61.     BoundingSphere bounds =
  62.         new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
  63.  
  64.     // Set up the background
  65.     TextureLoader bgTexture = new TextureLoader(bgImage, this);
  66.     Background bg = new Background(bgTexture.getImage());
  67.     bg.setApplicationBounds(bounds);
  68.     objRoot.addChild(bg);
  69.  
  70.     // Set up the global lights
  71.     Color3f lColor1 = new Color3f(0.7f, 0.7f, 0.7f);
  72.     Vector3f lDir1  = new Vector3f(-1.0f, -1.0f, -1.0f);
  73.     Color3f alColor = new Color3f(0.2f, 0.2f, 0.2f);
  74.  
  75.     AmbientLight aLgt = new AmbientLight(alColor);
  76.     aLgt.setInfluencingBounds(bounds);
  77.     DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1);
  78.     lgt1.setInfluencingBounds(bounds);
  79.     objRoot.addChild(aLgt);
  80.     objRoot.addChild(lgt1);
  81.  
  82.     // Create a bunch of objects with a behavior and add them
  83.     // into the scene graph.
  84.  
  85.     int row, col;
  86.     Appearance[][] app = new Appearance[3][3];
  87.  
  88.     for (row = 0; row < 3; row++)
  89.         for (col = 0; col < 3; col++)
  90.         app[row][col] = createAppearance(row * 3 + col);
  91.  
  92.     for (int i = 0; i < 3; i++) {
  93.         double ypos = (double)(i - 1) * 0.6;
  94.         for (int j = 0; j < 3; j++) {
  95.         double xpos = (double)(j - 1) * 0.6;
  96.         objRoot.addChild(createObject(app[i][j], 0.12,  xpos, ypos));
  97.         }
  98.     }
  99.  
  100.         // Let Java 3D perform optimizations on this scene graph.
  101.         objRoot.compile();
  102.  
  103.     return objRoot;
  104.     }
  105.  
  106.  
  107.     private Appearance createAppearance(int idx) {
  108.     Appearance app = new Appearance();
  109.  
  110.     // Globally used colors
  111.     Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
  112.     Color3f white = new Color3f(1.0f, 1.0f, 1.0f);
  113.  
  114.     switch (idx) {
  115.     // Unlit solid
  116.     case 0:
  117.         {
  118.         // Set up the coloring properties
  119.         Color3f objColor = new Color3f(1.0f, 0.2f, 0.4f);
  120.         ColoringAttributes ca = new ColoringAttributes();
  121.         ca.setColor(objColor);
  122.         app.setColoringAttributes(ca);
  123.         break;
  124.         }
  125.  
  126.  
  127.     // Unlit wire frame
  128.     case 1:
  129.         {
  130.         // Set up the coloring properties
  131.         Color3f objColor = new Color3f(0.5f, 0.0f, 0.2f);
  132.         ColoringAttributes ca = new ColoringAttributes();
  133.         ca.setColor(objColor);
  134.         app.setColoringAttributes(ca);
  135.  
  136.         // Set up the polygon attributes
  137.         PolygonAttributes pa = new PolygonAttributes();
  138.         pa.setPolygonMode(pa.POLYGON_LINE);
  139.         pa.setCullFace(pa.CULL_NONE);
  140.         app.setPolygonAttributes(pa);
  141.         break;
  142.         }
  143.  
  144.     // Unlit points
  145.     case 2:
  146.         {
  147.         // Set up the coloring properties
  148.         Color3f objColor = new Color3f(0.2f, 0.2f, 1.0f);
  149.         ColoringAttributes ca = new ColoringAttributes();
  150.         ca.setColor(objColor);
  151.         app.setColoringAttributes(ca);
  152.  
  153.         // Set up the polygon attributes
  154.         PolygonAttributes pa = new PolygonAttributes();
  155.         pa.setPolygonMode(pa.POLYGON_POINT);
  156.         pa.setCullFace(pa.CULL_NONE);
  157.         app.setPolygonAttributes(pa);
  158.  
  159.         // Set up point attributes
  160.         PointAttributes pta = new PointAttributes();
  161.         pta.setPointSize(5.0f);
  162.         app.setPointAttributes(pta);
  163.         break;
  164.         }
  165.  
  166.     // Lit solid
  167.     case 3:
  168.         {
  169.         // Set up the material properties
  170.         Color3f objColor = new Color3f(0.8f, 0.0f, 0.0f);
  171.         app.setMaterial(new Material(objColor, black, objColor,
  172.                          white, 80.0f));
  173.         break;
  174.         }
  175.  
  176.     // Texture mapped, lit solid
  177.     case 4:
  178.         {
  179.         // Set up the texture map
  180.         TextureLoader tex = new TextureLoader(texImage, this);
  181.         app.setTexture(tex.getTexture());
  182.  
  183.          TextureAttributes texAttr = new TextureAttributes();
  184.          texAttr.setTextureMode(TextureAttributes.MODULATE);
  185.          app.setTextureAttributes(texAttr);
  186.  
  187.         // Set up the material properties
  188.         app.setMaterial(new Material(white, black, white, black, 1.0f));
  189.         break;
  190.         }
  191.  
  192.     // Transparent, lit solid
  193.     case 5:
  194.         {
  195.         // Set up the transparency properties
  196.         TransparencyAttributes ta = new TransparencyAttributes();
  197.         ta.setTransparencyMode(ta.BLENDED);
  198.         ta.setTransparency(0.6f);
  199.         app.setTransparencyAttributes(ta);
  200.  
  201.         // Set up the polygon attributes
  202.         PolygonAttributes pa = new PolygonAttributes();
  203.         pa.setCullFace(pa.CULL_NONE);
  204.         app.setPolygonAttributes(pa);
  205.  
  206.         // Set up the material properties
  207.         Color3f objColor = new Color3f(0.7f, 0.8f, 1.0f);
  208.         app.setMaterial(new Material(objColor, black, objColor,
  209.                          black, 1.0f));
  210.         break;
  211.         }
  212.  
  213.     // Lit solid, no specular
  214.     case 6:
  215.         {
  216.         // Set up the material properties
  217.         Color3f objColor = new Color3f(0.8f, 0.0f, 0.0f);
  218.         app.setMaterial(new Material(objColor, black, objColor,
  219.                          black, 80.0f));
  220.         break;
  221.         }
  222.  
  223.     // Lit solid, specular only
  224.     case 7:
  225.         {
  226.         // Set up the material properties
  227.         Color3f objColor = new Color3f(0.8f, 0.0f, 0.0f);
  228.         app.setMaterial(new Material(black, black, black,
  229.                          white, 80.0f));
  230.         break;
  231.         }
  232.  
  233.     // Another lit solid with a different color
  234.     case 8:
  235.         {
  236.         // Set up the material properties
  237.         Color3f objColor = new Color3f(0.8f, 0.8f, 0.0f);
  238.         app.setMaterial(new Material(objColor, black, objColor,
  239.                          white, 80.0f));
  240.         break;
  241.         }
  242.  
  243.     default:
  244.         {
  245.         ColoringAttributes ca = new ColoringAttributes();
  246.         ca.setColor(new Color3f(0.0f, 1.0f, 0.0f));
  247.         app.setColoringAttributes(ca);
  248.         }
  249.     }
  250.  
  251.     return app;
  252.     }
  253.  
  254.  
  255.     private Group createObject(Appearance app, double scale,
  256.                    double xpos, double ypos) {
  257.  
  258.     // Create a transform group node to scale and position the object.
  259.     Transform3D t = new Transform3D();
  260.     t.set(scale, new Vector3d(xpos, ypos, 0.0));
  261.     TransformGroup objTrans = new TransformGroup(t);
  262.  
  263.     // Create a second transform group node and initialize it to the
  264.     // identity.  Enable the TRANSFORM_WRITE capability so that
  265.     // our behavior code can modify it at runtime.
  266.     TransformGroup spinTg = new TransformGroup();
  267.     spinTg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  268.  
  269.     // Create a simple shape leaf node and set the appearance
  270.     Shape3D shape = new Tetrahedron();
  271.     shape.setAppearance(app);
  272.  
  273.     // add it to the scene graph.
  274.     spinTg.addChild(shape);
  275.  
  276.     // Create a new Behavior object that will perform the desired
  277.     // operation on the specified transform object and add it into
  278.     // the scene graph.
  279.     Transform3D yAxis = new Transform3D();
  280.     Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE,
  281.                     0, 0,
  282.                     5000, 0, 0,
  283.                     0, 0, 0);
  284.  
  285.     RotationInterpolator rotator =
  286.         new RotationInterpolator(rotationAlpha, spinTg, yAxis,
  287.                      0.0f, (float) Math.PI*2.0f);
  288.  
  289.     BoundingSphere bounds =
  290.         new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
  291.  
  292.     rotator.setSchedulingBounds(bounds);
  293.  
  294.     // Add the behavior and the transform group to the object
  295.     objTrans.addChild(rotator);
  296.     objTrans.addChild(spinTg);
  297.  
  298.     return objTrans;
  299.     }
  300.  
  301.  
  302.     public AppearanceTest() {
  303.     }
  304.  
  305.     public AppearanceTest(java.net.URL bgurl, java.net.URL texurl) {
  306.         bgImage = bgurl;
  307.         texImage = texurl;
  308.     }
  309.       
  310.     public void init() {
  311.         if (bgImage == null) {
  312.         // the path to the image for an applet
  313.         try {
  314.             bgImage = new java.net.URL(getCodeBase().toString() +
  315.                        "../images/bg.jpg");
  316.         }
  317.         catch (java.net.MalformedURLException ex) {
  318.             System.out.println(ex.getMessage());
  319.         System.exit(1);
  320.         }
  321.     }
  322.  
  323.     if (texImage == null) {
  324.         // the path to the image for an applet
  325.         try {
  326.             texImage = new java.net.URL(getCodeBase().toString() +
  327.                         "../images/apimage.jpg");
  328.         }
  329.         catch (java.net.MalformedURLException ex) {
  330.             System.out.println(ex.getMessage());
  331.         System.exit(1);
  332.         }
  333.     }
  334.         setLayout(new BorderLayout());
  335.         GraphicsConfiguration config =
  336.            SimpleUniverse.getPreferredConfiguration();
  337.  
  338.         Canvas3D c = new Canvas3D(config);
  339.     add("Center", c);
  340.  
  341.     // Create a simple scene and attach it to the virtual universe
  342.     BranchGroup scene = createSceneGraph();
  343.     u = new SimpleUniverse(c);
  344.  
  345.         // This will move the ViewPlatform back a bit so the
  346.         // objects in the scene can be viewed.
  347.         u.getViewingPlatform().setNominalViewingTransform();
  348.  
  349.     u.addBranchGraph(scene);
  350.     }
  351.  
  352.     public void destroy() {
  353.     u.cleanup();
  354.     }
  355.  
  356.  
  357.     //
  358.     // The following allows AppearanceTest to be run as an application
  359.     // as well as an applet
  360.     //
  361.     public static void main(String[] args) {
  362.         // the path to the image file for an application
  363.         java.net.URL bgurl = null;
  364.         java.net.URL texurl = null;
  365.         try {
  366.       bgurl = new java.net.URL("file:../images/bg.jpg");
  367.       texurl = new java.net.URL("file:../images/apimage.jpg");
  368.     }
  369.     catch (java.net.MalformedURLException ex) {
  370.         System.out.println(ex.getMessage());
  371.         System.exit(1);
  372.     }
  373.     new MainFrame(new AppearanceTest(bgurl, texurl), 700, 700);
  374.     }
  375. }
  376.